// // type aliases
// type PlusType = (x: number, y: number) => number
// function sum(x: number, y: number): number {
//   return x + y
// }
// const sum2: PlusType = sum

// type NameResolver = () => string
// type NameOrResolver = string | NameResolver
// function getName(n: NameOrResolver): string {
//   if (typeof n === 'string') {
//     return n
//   } else {
//     return n()
//   }
// }

// // type assertion

// function getLength(input: string | number): number {
//   // const str = input as String
//   // if (str.length) {
//   //   return str.length
//   // } else {
//   //   const number = input as Number
//   //   return number.toString().length
//   // }
//   if ((<string>input).length) {
//     return (<string>input).length
//   } else {
//     return input.toString().length
//   }
// }

// function getLength1(input: string | number): number {
//   const str = input as String
//   if (str.length) {
//     return str.length
//   } else {
//     console.log('asd');

//     const number = input as Number
//     return number.toString().length
//   }
// }

// // getLength1(123)
// console.log(getLength1(123));

// function fn(a: string | null): void {
//   const length = (a as string).length
//   console.log((length));
// }

// fn(null)
type NumGenerator = () => number
function fn2(numGenerator: NumGenerator | undefined) {
  const nume1 = numGenerator();
}
